Without this the new kernel cannot receive timer interrupts from the
legacy sources. Hangs are observed in the second kernel's
"check_timer()" routing or at "Checking 'hlt' instruction."
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
#include <public/xen.h>
#include <asm/shared.h>
#include <asm/hvm/support.h>
+#include <asm/hpet.h>
static atomic_t waiting_for_crash_ipi;
static unsigned int crashing_cpu;
nmi_shootdown_cpus();
+ if ( hpet_broadcast_is_available() )
+ hpet_disable_legacy_broadcast();
+
disable_IO_APIC();
hvm_cpu_down();
void hpet_disable_legacy_broadcast(void)
{
u32 cfg;
+ unsigned long flags;
- spin_lock_irq(&legacy_hpet_event.lock);
+ spin_lock_irqsave(&legacy_hpet_event.lock, flags);
legacy_hpet_event.flags |= HPET_EVT_DISABLE;
cfg &= ~HPET_CFG_LEGACY;
hpet_write32(cfg, HPET_CFG);
- spin_unlock_irq(&legacy_hpet_event.lock);
+ spin_unlock_irqrestore(&legacy_hpet_event.lock, flags);
smp_send_event_check_mask(&cpu_online_map);
}